package com.violet.myorm.core.combination;

import com.violet.myorm.core.condition.LambdaWhere;
import com.violet.myorm.core.condition.SerializableFunction;
import com.violet.myorm.core.page.Limit;

import java.util.List;

public interface QueryCombination
        <E, R extends QueryCombination<?, ?>>
        extends Combination<LambdaWhere<E>, R>
{

    /**
     * 指定查询字段
     * @param fields 查询字段
     */
    R fields(SerializableFunction<E, ?>... fields);

    /**
     * 分页查询
     * @param page 偏移量
     * @param size 每页大小
     */
    Limit<E> limit(int page, int size);

    /**
     * 统计查询
     */
    int count();

    List<E> executeQuery();

}
